[アップデート]Amazon GuardDuty S3マルウェア保護機能有効化時のIAMロール作成が非常に楽になりました!

[アップデート]Amazon GuardDuty S3マルウェア保護機能有効化時のIAMロール作成が非常に楽になりました!

Amazon GuardDuty S3マルウェア保護機能の有効化時に面倒だったIAMロールの作成が0クリックで出来るようになりました
Clock Icon2024.10.27

こんにちは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。

みなさん、Amazon GuardDuty(以下GuardDuty)のS3マルウェア保護機能は使っていますか?

S3マルウェア保護機能とは、昨年Amazon GuardDutyに追加された新機能で、対象のS3バケットにマルウェアと思しきファイルがアップロードされた場合に検知してくれるというものです。
詳細は以下の記事をご参照ください。
https://dev.classmethod.jp/articles/release-guardduty-s3-malware-protection/

このS3マルウェア保護機能ですが、今までは設定の際にユーザーがGuardDuty用のサービスロールを作成する必要がありました。
ポリシーを1クリックでコピー出来るなどそれなりに簡単でしたが、正直面倒に思っていた人もいるのではないでしょうか。

ということで、このサービスロールの作成が 0クリック で行えるようになりました!

アップデートの内容はGuardDutyのユーザーガイドに記載されています。
まずはドキュメントヒストリーの内容から

Updated functionality in GuardDuty Malware Protection for S3

When enabling malware protection for S3, you can choose a service role that has the necessary permissions to perform malware scan actions on your behalf. For more information about enabling Malware Protection for S3, see Configuring Malware Protection for S3 for your S3 bucket.

引用元: https://docs.aws.amazon.com/guardduty/latest/ug/doc-history.html

(翻訳)

S3 向け GuardDuty マルウェア防御の機能更新

S3 のマルウェア対策を有効にする場合、ユーザーに代わってマルウェアスキャンアクションを実行するために必要な権限を持つサービスロールを選択できます。S3 のマルウェア対策を有効にする方法の詳細については、「S3 バケットの S3 のマルウェア対策の設定」を参照してください。

更新対象のユーザーガイドではこのように記載されています。

For Malware Protection for S3 to scan and (optionally) add tags to your S3 objects, you can use service roles that has the necessary permissions to perform malware scan actions on your behalf. For more information about using service roles to enable malware protection for S3, see Service Access. This role is different from the GuardDuty Malware Protection service-linked role.

(翻訳)

S3 のマルウェア防御で S3 オブジェクトをスキャンし、オプションでタグを追加するには、ユーザーに代わってマルウェアスキャンアクションを実行するために必要な権限を持つサービスロールを使用できます。サービスロールを使用して S3 のマルウェア防御を有効にする方法の詳細については、「サービスアクセス」を参照してください。このロールは、GuardDuty マルウェア防御のサービスにリンクされたロールとは異なります。

引用元: https://docs.aws.amazon.com/guardduty/latest/ug/configuring-malware-protection-for-s3-guardduty.html

※本記事執筆時点では英語版のユーザーガイドのみ上記内容に更新されています。

ざっくりまとめ

  • GuardDutyのS3マルウェア保護機能のIAMロール作成が楽になった
    • IAMロールを裏でいい感じに作成してくれるようになりました

何が変わったのか?

冒頭で紹介した記事にもありますが、今までは当該機能を有効化する際にユーザーがIAMロールを作る必要がありました。一応作りやすいようにIAMポリシーは1クリックでコピー出来るようにはなっていましたが、毎回作るのは面倒くさいです。また、通常の許可ポリシーだけでなく、信頼ポリシー(信頼関係)もコピペする必要がありました。

スクリーンショット 2024-10-27 17.55.02.png

引用元: ついにブロックができるようになった!Amazon GuardDuty Malware Protection for Amazon S3が発表されました! #AWSreInforce | DevelopersIO

この面倒なIAMロール作成を裏でやってくれるようになった、というのが今回のアップデートです。

やってみた

それでは早速やってみましょう。

GuardDutyでS3マルウェア保護機能を有効化してみます。
スクリーンショット 2024-10-27 18.01.18.png

赤枠部が今回変わった箇所ですね。まだ日本語化されていないようです。

スクリーンショット 2024-10-27 18.02.39.png

デフォルトで Create and use a new service role が選択されており、新規にIAMロールを作ってくれることが分かります。
新規に作成されるロール名は GuardDutyS3MalwareScanRole- がprefixに付いています。

ちなみに Use an existing service role を選択すると、下図のように既存のロールを選ぶことが出来たり、コンソールが少し変わりポリシー内容のコピーなど今まで存在したボタンが表示されます。良いですね。

スクリーンショット 2024-10-27 18.05.27.png

作成されたロールを見てみた

実際に作成されたロールが以下です。

スクリーンショット 2024-10-27 18.08.47.png

今回は GuardDutyS3MalwareProtectionPolicy-(バケット名)-(ランダムな数字) という名前のカスタムポリシーがアタッチされています。
また、信頼ポリシー(信頼関係)もちゃんとアタッチされていました。信頼ポリシーも付いているのは本当に嬉しいですね。初めて設定する人は付け忘れることもありそうですし。

ポリシー内容はこちら

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowManagedRuleToSendS3EventsToGuardDuty",
"Effect": "Allow",
"Action": [
"events:PutRule"
],
"Resource": [
"arn:aws:events:ap-northeast-1:123456789012:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
],
"Condition": {
"StringEquals": {
"events:ManagedBy": "malware-protection-plan.guardduty.amazonaws.com"
},
"ForAllValues:StringEquals": {
"events:source": "aws.s3",
"events:detail-type": [
"Object Created",
"AWS API Call via CloudTrail"
]
},
"Null": {
"events:source": "false",
"events:detail-type": "false"
}
}
},
{
"Sid": "AllowUpdateTargetAndDeleteManagedRule",
"Effect": "Allow",
"Action": [
"events:DeleteRule",
"events:PutTargets",
"events:RemoveTargets"
],
"Resource": [
"arn:aws:events:ap-northeast-1:123456789012:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
],
"Condition": {
"StringEquals": {
"events:ManagedBy": "malware-protection-plan.guardduty.amazonaws.com"
}
}
},
{
"Sid": "AllowGuardDutyToMonitorEventBridgeManagedRule",
"Effect": "Allow",
"Action": [
"events:DescribeRule",
"events:ListTargetsByRule"
],
"Resource": [
"arn:aws:events:ap-northeast-1:123456789012:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
]
},
{
"Sid": "AllowEnableS3EventBridgeEvents",
"Effect": "Allow",
"Action": [
"s3:PutBucketNotification",
"s3:GetBucketNotification"
],
"Resource": [
"arn:aws:s3:::test-iam-0click-becominn"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "123456789012"
}
}
},
{
"Sid": "AllowPostScanTag",
"Effect": "Allow",
"Action": [
"s3:GetObjectTagging",
"s3:GetObjectVersionTagging",
"s3:PutObjectTagging",
"s3:PutObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::test-iam-0click-becominn/"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "123456789012"
}
}
},
{
"Sid": "AllowPutValidationObject",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::test-iam-0click-becominn/malware-protection-resource-validation-object"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "123456789012"
}
}
},
{
"Sid": "AllowCheckBucketOwnership",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::test-iam-0click-becominn"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "123456789012"
}
}
},
{
"Sid": "AllowMalwareScan",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::test-iam-0click-becominn/
"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "123456789012"
}
}
}
]
}

信頼ポリシー(信頼関係)はこちら

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GuardDutyMalwareProtectionForS3",
"Effect": "Allow",
"Principal": {
"Service": "malware-protection-plan.guardduty.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "123456789012"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:guardduty:ap-northeast-1:123456789012:malware-protection-plan/*"
}
}
}
]
}

どちらも機能設定時にコピー出来たポリシーと同内容のものがアタッチされていました。

最後に

GuardDutyの当該機能はS3バケットごとに有効化する必要があり、その度にIAMロールを作成する必要がありました。
大量に設定する人にとって、今回のアップデートは痒いところに手が届く、非常に良いアップデートなのではないかと思います。

本記事がどなたかのお役に立てれば幸いです。

以上、べこみんでした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.